package com.resume.bean;


import com.resume.enums.ResultEnum;

/**
 * 结果工具类
 *
 * @author 梁云亮
 */
public class ResultUtil {

    /**
     * 操作失败,返回具体的数据、结果码和提示信息
     *
     * @param code 编号
     * @param msg  信息
     * @param data 数据
     * @return 结果
     */
    public static <T> Result<T> success(Integer code, String msg, T data) {
        return new Result<T>(code, msg, data);
    }

    /**
     * 操作失败,只返回指定的结果码和具体的数据，但不返回提示信息
     *
     * @param msg  信息
     * @param data 数据
     * @param <T>  泛型
     * @return 结果
     */
    public static <T> Result<T> success(String msg, T data) {
        Result<T> res = new Result<T>().setMsg(msg).setData(data);
        return res;
    }

    public static <T> Result<T> success(int code, String msg) {
        Result<T> res = new Result<T>().setCode(code).setMsg(msg);
        return res;
    }

    /**
     * 操作失败,只返回指定的结果码和具体的数据，但不返回提示信息
     *
     * @param code 编号
     * @param <T>  泛型
     * @return 结果
     */
    public static <T> Result<T> success(int code, T data) {
        Result<T> res = new Result<T>().setCode(code).setData(data);
        return res;
    }

    /**
     * 成功
     *
     * @param resultEnum 结果枚举
     * @param <T>        泛型
     * @return 枚举封装后的结果
     */
    public static <T> Result<T> success(ResultEnum resultEnum) {
        return new Result<T>(resultEnum);
    }

    /**
     * 操作成功,返回具体的数据、结果码和提示信息
     * 用于数据查询接口
     *
     * @param resultEnum 结果效果
     * @param data       数据
     * @return 结果
     */
    public static <T> Result<T> success(ResultEnum resultEnum, T data) {
        Result<T> result = new Result<T>(resultEnum).setData(data);
        return result;
    }

    /**
     * 操作失败,返回具体的数据、结果码和提示信息
     *
     * @param code 编号
     * @param msg  信息
     * @param data 数据
     * @return 结果
     */
    public static <T> Result<T> error(Integer code, String msg, T data) {
        return new Result<T>(code, msg, data);
    }

    /**
     * 操作失败,只返回指定的结果码和具体的数据，但不返回提示信息
     *
     * @param msg  信息
     * @param data 数据
     * @param <T>  泛型
     * @return 结果
     */
    public static <T> Result<T> error(String msg, T data) {
        Result<T> res = new Result<T>().setMsg(msg).setData(data);
        return res;
    }

    public static <T> Result<T> error(String msg) {
        Result<T> res = new Result<T>().setMsg(msg);
        return res;
    }

    public static <T> Result<T> error(int code, String msg) {
        Result<T> res = new Result<T>().setCode(code).setMsg(msg);
        return res;
    }

    /**
     * 操作失败,只返回指定的结果码和具体的数据，但不返回提示信息
     *
     * @param code 编号
     * @param <T>  泛型
     * @return 结果
     */
    public static <T> Result<T> error(int code, T data) {
        return new Result<T>();
    }


    /**
     * 失败
     *
     * @param resultEnum 枚举
     * @param <T>        泛型
     * @return 结果
     */
    public static <T> Result<T> error(ResultEnum resultEnum) {
        return new Result<T>(resultEnum);
    }


    /**
     * 操作失败,只返回指定的结果码和具体的数据，但不返回提示信息
     *
     * @param resultEnum 枚举
     * @param data       数据
     * @param <T>        泛型
     * @return 结果
     */
    public static <T> Result<T> error(ResultEnum resultEnum, T data) {
        Result<T> result = new Result<T>(resultEnum).setData(data);
        return result;
    }

    public static void main(String[] args) {
        System.out.println(ResultUtil.success(200, "asdf"));
        System.out.println(ResultUtil.success(200, 1234));
    }
}
